package com.liannong.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.liannong.entity.Order;
import com.liannong.vo.OrderVO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.TransactionTemplate;
import org.springframework.beans.factory.annotation.Autowired;

public interface OrderService extends IService<Order> {
    
    /**
     * 创建订单
     * @param order 订单信息
     * @return 订单ID
     */
    Integer createOrder(Order order);
    
    /**
     * 支付订单
     * @param orderId 订单ID
     * @return 支付结果
     */
    boolean payOrder(Integer orderId);
    
    /**
     * 取消订单
     * @param orderId 订单ID
     * @return 取消结果
     */
    boolean cancelOrder(Integer orderId);
    
    /**
     * 获取订单详情
     * @param orderId 订单ID
     * @return 订单详情
     */
    OrderVO getOrderDetail(Integer orderId);
    
    /**
     * 更新订单配送状态
     * @param orderId 订单ID
     * @param toDelivery 是否配送 true-配送中，false-已支付未配送
     * @return 更新结果
     */
    boolean updateDeliveryStatus(Integer orderId, boolean toDelivery);
    
    /**
     * 根据用户权限分页查询订单列表
     * @param userId 用户ID
     * @param roleId 角色ID
     * @param orderNo 订单号
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @return 订单列表分页数据
     */
    @Transactional(readOnly = true)
    IPage<OrderVO> findOrdersByUserPermission(@Param("userId") Integer userId, @Param("roleId") Integer roleId, @Param("orderNo") String orderNo, @Param("pageNum") Integer pageNum, @Param("pageSize") Integer pageSize);
} 